package myjava.n_scriptEngine;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * @Auther: cty
 * @Date: 2020/4/13 18:42
 * @Description:  脚本引擎（JDK6.0添加）  未成功！！！
 * @version: 1.0
 */
public class PythonEngine {
    public static void main(String[] args) throws ScriptException {
        //获得脚本引擎
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine engine = sem.getEngineByName("python");


        System.out.println("1 执行脚本运算");
        System.out.println(engine.eval("print('hello')"));
        System.out.println("****************************************************************");

        /* res: 2020年4月13日
        * 1 执行脚本运算
        * Exception in thread "main" java.lang.NullPointerException
        * 	at com.cty.PythonExecute.main(PythonExecute.java:27)
        * */

//        System.out.println("2 变量操作");
//        //向引擎上下文中定义一个变量（Java和脚本都可以访问）
//        engine.put("msg", "cty is a good man!");
//
//        // Java获取引擎上下文中的变量
//        System.out.println(engine.get("msg"));
//        // 脚本获取引擎上下文中的变量
//        engine.eval("print(msg)");
//
//        // 修改引擎上下文中的变量
//        engine.eval("msg='whu is a good school!'");
//        System.out.println(engine.get("msg"));
//        System.out.println("****************************************************************");
//
//
//        System.out.println("3 调用脚本函数");
//        // 定义函数
//        engine.eval("function add (a, b) {var sum = a + b; return sum; }");
//        // 取得调用接口
//        Invocable jsInvoke = (Invocable) engine;
//        //执行脚本中定义的方法
//        Object result1 = null;
//        try {
//            result1 = jsInvoke.invokeFunction("add", new Object[] { 13, 20 });
//            System.out.println(result1);
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        }
//        System.out.println("****************************************************************");
//
//        System.out.println("4 调用脚本文件");
//        //执行一个js文件(我们将a.js至于项目的src下即可)
//        URL is = null;
//        Reader r = null;
//        try {
//            is = PythonExecute.class.getClassLoader().getResource("a.js");
//            r = new FileReader(is.getPath());
//            engine.eval(r);
////            System.out.println(engine.eval(r));
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        }
//        System.out.println("****************************************************************");
//
//
//        System.out.println("5 脚本中导入Java包，并调用改包中Java类的方法");
//        String jsCode = "var list = java.util.Arrays.asList([\"武汉大学\",\"清华大学\",\"北京大学\"]); ";
//        engine.eval(jsCode);
//        List<String> list2 = (List<String>) engine.get("list");
//        for (String temp : list2) {
//            System.out.println(temp);
//        }
//        System.out.println("****************************************************************");


    }
}

/* res: 2020年4月13日
1 执行脚本运算
3
6.0
****************************************************************
2 变量操作
cty is a good man!
cty is a good man!
whu is a good school!
****************************************************************
3 调用脚本函数
33.0
****************************************************************
4 调用脚本文件
invoke js file:7
****************************************************************
5 脚本中导入Java包，并调用改包中Java类的方法
武汉大学
清华大学
北京大学
****************************************************************
*/
